/*************************Copyright (c)*************************
 

**--------------------------File Info---------------------------

** File name:
** Last modified Date:

** Last Version:

** Descriptions:
**---------------------------------------------------------------

** Created by:		刘家辉 
** Created date:	2021/01/06

** Version:			V1.0
** Descriptions:	这里是参照《UNIX环境高级编程-第三版》中的编程实例（图1-8 示例strerror和perror）
** Notes:           
** Tips:               
**---------------------------------------------------------------
*/

#include "apue.h"
#include <errno.h>

int main(int argc, char *argv[])
{   
    /*  
    strerror函数将errnum（通常就是errno值）映射为一个出错消息字符串，并且返回此字符串的指针
    strerror函数，返回一个指针，指针指向当前 errno 值的文本表示形式
    */
    fprintf(stderr,"EACCES: %s\n", strerror(EACCES));//EACCES: Permission denied
    
    /* 
    将程序名，也就是./strerror_perror作为参数传递给perror。 这是一个标准的UNIX惯例。
    使用这种方法，在程序作为管道的一部分执行时，例如：
    prog <inputfile | prog2 | prog3 > outputfile
    我们就能分清3个程序中的哪一个产生了一条特定的出错消息
    perror函数基于errno的当前值，在标准错误上产生一条出错消息，然后返回。
    perror函数显示您传给它的字符串，后跟一个冒号、一个空格和当前 errno 值的文本表示形式。
    */
    errno = ENOENT;//./strerror_perror: No such file or directory
    // errno = ENOEXEC;//./strerror_perror: Exec format error
    perror(argv[0]);
    exit(0);
}